﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Data;

namespace DAO
{
    public class XeDAO : AbstractDAO<DTO.XeDTO>
    {

        protected override string GetTableName()
        {
            return "xe";
        }

        public override DTO.XeDTO GetByDataRow(System.Data.DataRow data)
        {
            DTO.XeDTO xe = new DTO.XeDTO();
            int id, soGhe, tinhTrang, loai;
            bool daXoa;
            int.TryParse(data["id"].ToString(), out id);
            xe.TenXe = data["tenxe"].ToString();
            xe.BienSo = data["bienso"].ToString();
            xe.HangSanXuat = data["hangsanxuat"].ToString();
            int.TryParse(data["loai"].ToString(), out loai);
            int.TryParse(data["soghe"].ToString(), out soGhe);
            int.TryParse(data["tinhtrang"].ToString(), out tinhTrang);
            bool.TryParse(data["daxoa"].ToString(), out daXoa);

            xe.Id = id;
            xe.SoGhe = soGhe;
            xe.TinhTrang = tinhTrang;
            xe.DaXoa = daXoa;
            xe.Loai = loai;

            return xe;
        }

        public bool AddNew(DTO.XeDTO xeDTO)
        {
            IList<SqlParameter> listParameter = new List<SqlParameter>();
            listParameter.Add(new SqlParameter("@TenXe", xeDTO.TenXe));
            listParameter.Add(new SqlParameter("@BienSo", xeDTO.BienSo));
            listParameter.Add(new SqlParameter("@Loai", xeDTO.Loai));
            listParameter.Add(new SqlParameter("@HangSanXuat", xeDTO.HangSanXuat));
            listParameter.Add(new SqlParameter("@SoGhe", xeDTO.SoGhe));
            listParameter.Add(new SqlParameter("@TinhTrang", xeDTO.TinhTrang));
            SqlParameter sqlThongBao = new SqlParameter("@ThanhCong", SqlDbType.Bit);
            sqlThongBao.Direction = System.Data.ParameterDirection.Output;
            listParameter.Add(sqlThongBao);

            this.dataProvider.ExecuteStoreProc(
                "Proc_ThemXeMoi",
                listParameter);
            return (bool)sqlThongBao.Value;
        }

        public bool Edit(DTO.XeDTO xeDTO)
        {
            IList<SqlParameter> listParameter = new List<SqlParameter>();
            listParameter.Add(new SqlParameter("@Id", xeDTO.Id));
            listParameter.Add(new SqlParameter("@TenXe", xeDTO.TenXe));
            listParameter.Add(new SqlParameter("@BienSo", xeDTO.BienSo));
            listParameter.Add(new SqlParameter("@Loai", xeDTO.Loai));
            listParameter.Add(new SqlParameter("@HangSanXuat", xeDTO.HangSanXuat));
            listParameter.Add(new SqlParameter("@SoGhe", xeDTO.SoGhe));
            listParameter.Add(new SqlParameter("@TinhTrang", xeDTO.TinhTrang));
            listParameter.Add(new SqlParameter("@DaXoa", xeDTO.DaXoa));
            SqlParameter thongBao = new SqlParameter("@ThanhCong", System.Data.SqlDbType.Bit);
            thongBao.Direction = System.Data.ParameterDirection.Output;
            listParameter.Add(thongBao);

            this.dataProvider.ExecuteStoreProc(
                "Proc_CapNhatXe",
                listParameter);
            return (bool)thongBao.Value;
        }

        public bool CheckNameExists(string name)
        {
            IList<SqlParameter> listParameter = new List<SqlParameter>();
            listParameter.Add(new SqlParameter("@TenXe", name));
            SqlParameter thanhCong = new SqlParameter("@ThanhCong", System.Data.SqlDbType.Bit);
            thanhCong.Direction = System.Data.ParameterDirection.Output;
            listParameter.Add(thanhCong);
            this.dataProvider.ExecuteStoreProc(
                "Proc_CheckCarNameExists",
                listParameter);
            return (bool)thanhCong.Value;
        }

        public bool CapNhatTinhTrang(int id, int tinhtrang)
        {
            IList<SqlParameter> listParameter = new List<SqlParameter>();
            listParameter.Add(new SqlParameter("@Id", id));
            listParameter.Add(new SqlParameter("@TinhTrang", tinhtrang));
            this.dataProvider.ExecuteStoreProc(
                "Proc_CapNhatTinhTrang",
                listParameter);
            return (bool)true;
        }

        public bool NgungSuDung(int id, bool ngungSuDung)
        {
            IList<SqlParameter> listParameter = new List<SqlParameter>();
            listParameter.Add(new SqlParameter("@Id", id));
            listParameter.Add(new SqlParameter("@NgungSuDung", ngungSuDung));
            this.dataProvider.ExecuteStoreProc(
                "Proc_NgungSuDung",
                listParameter);
            return (bool)true;
        }


    }
}
